# 学生类
class Student(object):  # 基类
    # 统计有多少个人？
    count = 0
    # 自动生成学 ，并记录学号。
    numbers=[]  # 【10001,10002,10003,10004】
    id=10000

    # 能告诉我，并打印班上的最大学号是什么？
    @classmethod
    def show_max_nu(cls):
        print(f"最大的学号是 {Student.max_nu(Student.numbers)}")

    @staticmethod
    def max_nu(li):
        """返回li中最大值"""
        """
        ['class3-10000', 'class3-10001', 'class3-10002']
        """
        a=li.copy()
        a.sort(key=lambda x: int(x.split("-")[-1]))
        return a[-1]



    def __init__(self,name):  # 构造方法，初始化方法
        Student.count += 1
        self.name=name
        self.nu="class3-"+str(Student.id)  # 要自动的
        Student.id+=1
        Student.numbers.append(self.nu) # 添加学号
    def learn(self):
        print("我能学习。。。。")

    #对象在消亡的时候，Student 中numbers 要去掉学号。
    def __del__(self): # 析构，销毁方法
        Student.numbers.remove(self.nu)

    #我想在打印对象的时候，提示我的姓名和学号
    def __str__(self):
        return f"我的姓名是{self.name},学号是{self.nu}"




class Student1(Student):   # 只需要在括号中填写类名，就可以完成继承。
    """
    继承 Student
    继承后一般会改变一些东西（修改，新增）
    """
    # 新增一个实例方法
    def sing(self):
        print("Student1类 都能唱歌~")
    # 新增一个类方法
    @classmethod
    def new_class_method(cls):
        print("Student1新增了一个类方法")
    # 新增静态方法
    @staticmethod
    def new_staticmethod():
        print("Student1新增了一个静态方法方法")
    # 新增 实例构造方法？析构方法？  一个类里面能有2个实例构造方法吗？
    # 新增类属性
    class_room="第三教室"
    # 新增实例属性
    def add_attr(self):
        self.addr="成都"
        self.name="adsfsadfsadfdsafdsaf"
   ####改。。。。
    # 完全重新改，只需要同名就可以。
    # # 类属性
    # id=20000
    # # 类方法
    # @classmethod
    # def show_max_nu(cls):
    #     print("修改后的show_max_nu方法")
    # # 类静态方法
    # @staticmethod
    # def max_nu():
    #     print("修改后的max_nu")
    # # 实例方法
    # def learn(self):
    #     print("修改后的learn方法")
    # 实例属性

    # 拿做以前的功能继续完善？
    # 完善父类的类方法
    @classmethod
    def show_max_nu(cls):  # 重写
        #1.拿父类的功能
        Student.show_max_nu()  # 指定类
        #2.完善
        print("如果展示了次信息，那么证明完善了父类的类方法，")
        # pass

    # 完善父类的静态方法

    @staticmethod
    def max_nu(li):

        print("如果运行了此句，完善了静态方法")
        return Student.max_nu(li)

    # 完善父类的实例方法 （构造，析构，__str__）

    def __init__(self,name,age):
        # 拿父类
        super(Student1,self).__init__(name)
        super(Student1,self).show_max_nu()
        # 做添加
        self.age=age
    # def __del__(self):   # 重写
    #     super(Student1, self).__del__()
    #     print(self.name,"之类Student1的 del 方法做的某些改进。。。。。。。")
    def learn(self):
        #....
        super(Student1, self).learn()
        #....

# 研究哪些能够继承过来?
# 类属性
s1=Student1("张三",19)
s2=Student1("李四",20)
print(Student1.numbers)
del s2
print(Student1.numbers)
print(s1.name,s1.age)


# print(Student1.numbers)  # 继承
# print(Student.numbers) #是继承的类是同一个属性
# 类方法
# Student1.show_max_nu()
# Student.show_max_nu()
# 类静态方法
# print(Student1.max_nu(['class3-10000', 'class3-10001']))
# print(Student.max_nu(['class3-10000', 'class3-10001']))
# 实例方法 （构造方法，析构方法，普通方法,打印对象的方法）
# print(s1.name,s1.nu)
# del s1
# print(Student1.numbers)
#
# s2.learn()
# print(s2)
# 实例属性
# print(s2.name,s2.nu)
#
# s1.sing()
# Student1.new_class_method()
# Student1.new_staticmethod()
# print(Student1.class_room)
# s1.add_attr()
# print(s1.addr)

# print(Student1.max_nu(["class3-10001","class3-10002","class3-10003"]))


